using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace FastPoster.MainForms
{
	#region using
	using DevComponents.DotNetBar;
	using System.Data;
    using FastPoster.MainClasses;
    using FastPoster.DataProviders.BUS;
    using FastPoster.DataProviders.DTO;
    using FastPoster.Helpers;
	#endregion

	public partial class FrmDanhMuc : Office2007Form
	{
        //  event handler to transfer data to other forms
        public EventHandler Handler { get; set; }

        public FrmDanhMuc()
		{
			InitializeComponent();
		}

		private void FrmQuanLyDanhMuc_Load(object sender, EventArgs e)
		{
			InitGridView();
			LoadData();
			dtgvData.ClearSelection();
		}


		private void btnThem_Click(object sender, EventArgs e)
		{
			var errorText = "";
			if (!ValidateInput(EnumUpdateMode.INSERT, ref errorText))
			{
				MessageBoxEx.Show(errorText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				return;
			}
			if (ActionAdd())
			{
				MessageBoxEx.Show("Lưu dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
				LoadData();
				btnReset_Click(sender, e);
			}
			else
			{
				MessageBoxEx.Show("Lưu dữ liệu thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
		}

		private void btnXoa_Click(object sender, EventArgs e)
		{
			var errorText = "";
			if (!ValidateInput(EnumUpdateMode.DELETE, ref errorText))
			{
				MessageBoxEx.Show(errorText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				return;
			}
			if (MessageBoxEx.Show("Bạn có chắc chắn xóa dòng này không?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
			{
				if (ActionDelete())
				{
					MessageBoxEx.Show("Xóa dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
					LoadData();
					btnReset_Click(sender, e);
				}
				else
				{
					MessageBoxEx.Show("Xóa dữ liệu thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				}
			}
		}

		private void btnCapNhat_Click(object sender, EventArgs e)
		{
			var errorText = "";
			if (!ValidateInput(EnumUpdateMode.UPDATE, ref errorText))
			{
				MessageBoxEx.Show(errorText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				return;
			}
			if (ActionUpdate())
			{
				MessageBoxEx.Show("Cập nhật dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
				LoadData();
			}
			else
			{
				MessageBoxEx.Show("Cập nhật dữ liệu thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
		}

		private void btnThoat_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void btnReset_Click(object sender, EventArgs e)
		{
			txtID.Text = "";
			txtTenDanhMuc.Text = "";
		}

		private void dtgvData_CellClick(object sender, DataGridViewCellEventArgs e)
		{
			if (dtgvData.SelectedRows == null || dtgvData.SelectedRows.Count == 0)
				return;
			var selectedItem = dtgvData.SelectedRows[0];
			txtID.Text = dtgvData.SelectedRows[0].Cells["ID"].Value.ToString();

            var objBUS = new DanhMucBUS(GlobalVariables.g_strPath);
            var ds = objBUS.SelectByID(int.Parse(txtID.Text));
            if (ds.Tables[0].Rows.Count > 0)
            {
                var row = ds.Tables[0].Rows[0];
                LoadDetailInfo(row);
            }
		}

		public void LoadDetailInfo(DataRow row)
		{
            txtTenDanhMuc.Text = row["TenDanhMuc"].ToString();
		}

		private void InitGridView()
		{
			DataGridViewTextBoxColumn objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "ID",
				DataPropertyName = "ID",
				Name = "ID",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/3))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "TenDanhMuc",
				DataPropertyName = "TenDanhMuc",
				Name = "TenDanhMuc",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)2/3)) - 1
			};
			dtgvData.Columns.Add(objColumn);
		}


		private void LoadData()
		{
            var objBUS = new DanhMucBUS(GlobalVariables.g_strPath);
            var ds = objBUS.SelectAll();
			var dt = new DataTable();
			dt.Columns.Add("ID");
			dt.Columns.Add("TenDanhMuc");
			for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
			{
                var row = ds.Tables[0].Rows[i];
                dt.Rows.Add(row["ID"].ToString(), row["TenDanhMuc"].ToString());
			}
			DataView objTimeSheetDV = new System.Data.DataView(dt);
			objTimeSheetDV.AllowNew = false;
			dtgvData.AutoGenerateColumns = false;
			dtgvData.DataSource = objTimeSheetDV;
			dtgvData.ClearSelection();
		}

		private bool ValidateInput(EnumUpdateMode mode, ref string errorText)
		{
			if (mode == EnumUpdateMode.UPDATE || mode == EnumUpdateMode.DELETE)
			{
				if (txtID.Text == "")
				{
					errorText = "Vui lòng chọn ID";
					return false;
				}
			}
			if (mode != EnumUpdateMode.DELETE)
			{
				if (txtTenDanhMuc.Text == "")
				{
					 errorText = "Vui lòng nhập TenDanhMuc";
					return false;
				}
			}
			return true;
		}

		private bool ActionAdd()
		{
			try
			{
				var item = new DanhMucDTO
				{
					TenDanhMuc = txtTenDanhMuc.Text,
				};

                var objBUS = new DanhMucBUS(GlobalVariables.g_strPath);
                if (!objBUS.Insert(item))
				{
					return false;
				}
				return true;
			}
			catch
			{
				return false;
			}
		}

		private bool ActionUpdate()
		{
			try
			{
                var item = new DanhMucDTO
                {
                    ID = int.Parse(txtID.Text),
                    TenDanhMuc = txtTenDanhMuc.Text
                };
                var objBUS = new DanhMucBUS(GlobalVariables.g_strPath);
                return objBUS.Update(item);
			}
			catch
			{
				return false;
			}
		}

		private bool ActionDelete()
		{
			try
			{
                var objBUS = new DanhMucBUS(GlobalVariables.g_strPath);
                return objBUS.Delete(int.Parse(txtID.Text));
			}
			catch
			{
				return false;
			}
		}

        private void FrmDanhMuc_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Handler(this, e);
            this.Close();
        }
	}
}